home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 21 / AACD 21.iso / AACD / Utilities / Ghostscript / src / gsroptab.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-01-01  |  16.6 KB  |  372 lines

  1. /* Copyright (C) 1995, 1997, 1998 Aladdin Enterprises.  All rights reserved.
  2.   
  3.   This file is part of AFPL Ghostscript.
  4.   
  5.   AFPL Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author or
  6.   distributor accepts any responsibility for the consequences of using it, or
  7.   for whether it serves any particular purpose or works at all, unless he or
  8.   she says so in writing.  Refer to the Aladdin Free Public License (the
  9.   "License") for full details.
  10.   
  11.   Every copy of AFPL Ghostscript must include a copy of the License, normally
  12.   in a plain ASCII text file named PUBLIC.  The License grants you the right
  13.   to copy, modify and redistribute AFPL Ghostscript, but only under certain
  14.   conditions described in the License.  Among other things, the License
  15.   requires that the copyright notice and this notice be preserved on all
  16.   copies.
  17. */
  18.  
  19. /*$Id: gsroptab.c,v 1.2 2000/09/19 19:00:32 lpd Exp $ */
  20. /* Table of RasterOp procedures */
  21. #include "stdpre.h"
  22. #include "gsropt.h"
  23.  
  24. /*
  25.  * The H-P documentation (probably copied from Microsoft documentation)
  26.  * specifies RasterOp algorithms using reverse Polish notation, with
  27.  *   a = AND, o = OR, n = NOT, x = XOR
  28.  */
  29.  
  30. #ifdef __PROTOTYPES__
  31. #  define rop_proc(pname, expr)\
  32. private rop_operand pname(rop_operand D, rop_operand S, rop_operand T)\
  33. { return expr; }
  34. #else
  35. #  define rop_proc(pname, expr)\
  36. private rop_operand pname(D,S,T) rop_operand D; rop_operand S; rop_operand T;\
  37. { return expr; }
  38. #endif
  39.  
  40. #define a(u,v) (u&v)
  41. #define o(u,v) (u|v)
  42. #define x(u,v) (u^v)
  43.  
  44. rop_proc(rop0, 0)        /* 0 */
  45. rop_proc(rop1, ~(D | S | T))        /* DTSoon */
  46. rop_proc(rop2, D & ~(S | T))        /* DTSona */
  47. rop_proc(rop3, ~(S | T))    /* TSon */
  48. rop_proc(rop4, S & ~(D | T))        /* SDTona */
  49. rop_proc(rop5, ~(D | T))    /* DTon */
  50. rop_proc(rop6, ~(T | ~(D ^ S)))        /* TDSxnon */
  51. rop_proc(rop7, ~(T | (D & S)))        /* TDSaon */
  52. rop_proc(rop8, S & (D & ~T))        /* SDTnaa */
  53. rop_proc(rop9, ~(T | (D ^ S)))        /* TDSxon */
  54. rop_proc(rop10, D & ~T)        /* DTna */
  55. rop_proc(rop11, ~(T | (S & ~D)))    /* TSDnaon */
  56. rop_proc(rop12, S & ~T)        /* STna */
  57. rop_proc(rop13, ~(T | (D & ~S)))    /* TDSnaon */
  58. rop_proc(rop14, ~(T | ~(D | S)))    /* TDSonon */
  59. rop_proc(rop15, ~T)        /* Tn */
  60. rop_proc(rop16, T & ~(D | S))        /* TDSona */
  61. rop_proc(rop17, ~(D | S))    /* DSon */
  62. rop_proc(rop18, ~(S | ~(D ^ T)))    /* SDTxnon */
  63. rop_proc(rop19, ~(S | (D & T)))        /* SDTaon */
  64. rop_proc(rop20, ~(D | ~(T ^ S)))    /* DTSxnon */
  65. rop_proc(rop21, ~(D | (T & S)))        /* DTSaon */
  66. rop_proc(rop22, (T ^ (S ^ (D & ~(T & S)))))        /* TSDTSanaxx */
  67. rop_proc(rop23, ~(S ^ ((S ^ T) & (D ^ S))))        /* SSTxDSxaxn */
  68. rop_proc(rop24, (S ^ T) & (T ^ D))    /* STxTDxa */
  69. rop_proc(rop25, ~(S ^ (D & ~(T & S))))        /* SDTSanaxn */
  70. rop_proc(rop26, T ^ (D | (S & T)))    /* TDSTaox */
  71. rop_proc(rop27, ~(S ^ (D & (T ^ S))))        /* SDTSxaxn */
  72. rop_proc(rop28, T ^ (S | (D & T)))    /* TSDTaox */
  73. rop_proc(rop29, ~(D ^ (S & (T ^ D))))        /* DSTDxaxn */
  74. rop_proc(rop30, T ^ (D | S))        /* TDSox */
  75. rop_proc(rop31, ~(T & (D | S)))        /* TDSoan */
  76. rop_proc(rop32, D & (T & ~S))        /* DTSnaa */
  77. rop_proc(rop33, ~(S | (D ^ T)))        /* SDTxon */
  78. rop_proc(rop34, D & ~S)        /* DSna */
  79. rop_proc(rop35, ~(S | (T & ~D)))    /* STDnaon */
  80. rop_proc(rop36, (S ^ T) & (D ^ S))    /* STxDSxa */
  81. rop_proc(rop37, ~(T ^ (D & ~(S & T))))        /* TDSTanaxn */
  82. rop_proc(rop38, S ^ (D | (T & S)))    /* SDTSaox */
  83. rop_proc(rop39, S ^ (D | ~(T ^ S)))        /* SDTSxnox */
  84. rop_proc(rop40, D & (T ^ S))        /* DTSxa */
  85. rop_proc(rop41, ~(T ^ (S ^ (D | (T & S)))))        /* TSDTSaoxxn */
  86. rop_proc(rop42, D & ~(T & S))        /* DTSana */
  87. rop_proc(rop43, ~x(a(x(D, T), x(T, S)), S))        /* SSTxTDxaxn */
  88. rop_proc(rop44, (S ^ (T & (D | S))))        /* STDSoax */
  89. rop_proc(rop45, T ^ (S | ~D))        /* TSDnox */
  90. rop_proc(rop46, (T ^ (S | (D ^ T))))        /* TSDTxox */
  91. rop_proc(rop47, ~(T & (S | ~D)))    /* TSDnoan */
  92. rop_proc(rop48, T & ~S)        /* TSna */
  93. rop_proc(rop49, ~(S | (D & ~T)))    /* SDTnaon */
  94. rop_proc(rop50, S ^ (D | (T | S)))    /* SDTSoox */
  95. rop_proc(rop51, ~S)        /* Sn */
  96. rop_proc(rop52, S ^ (T | (D & S)))    /* STDSaox */
  97. rop_proc(rop53, S ^ (T | ~(D ^ S)))        /* STDSxnox */
  98. rop_proc(rop54, S ^ (D | T))        /* SDTox */
  99. rop_proc(rop55, ~(S & (D | T)))        /* SDToan */
  100. rop_proc(rop56, T ^ (S & (D | T)))    /* TSDToax */
  101. rop_proc(rop57, S ^ (T | ~D))        /* STDnox */
  102. rop_proc(rop58, S ^ (T | (D ^ S)))    /* STDSxox */
  103. rop_proc(rop59, ~(S & (T | ~D)))    /* STDnoan */
  104. rop_proc(rop60, T ^ S)        /* TSx */
  105. rop_proc(rop61, S ^ (T | ~(D | S)))        /* STDSonox */
  106. rop_proc(rop62, S ^ (T | (D & ~S)))        /* STDSnaox */
  107. rop_proc(rop63, ~(T & S))    /* TSan */
  108. rop_proc(rop64, T & (S & ~D))        /* TSDnaa */
  109. rop_proc(rop65, ~(D | (T ^ S)))        /* DTSxon */
  110. rop_proc(rop66, (S ^ D) & (T ^ D))    /* SDxTDxa */
  111. rop_proc(rop67, ~(S ^ (T & ~(D & S))))        /* STDSanaxn */
  112. rop_proc(rop68, S & ~D)        /* SDna */
  113. rop_proc(rop69, ~(D | (T & ~S)))    /* DTSnaon */
  114. rop_proc(rop70, D ^ (S | (T & D)))    /* DSTDaox */
  115. rop_proc(rop71, ~(T ^ (S & (D ^ T))))        /* TSDTxaxn */
  116. rop_proc(rop72, S & (D ^ T))        /* SDTxa */
  117. rop_proc(rop73, ~(T ^ (D ^ (S | (T & D)))))        /* TDSTDaoxxn */
  118. rop_proc(rop74, D ^ (T & (S | D)))    /* DTSDoax */
  119. rop_proc(rop75, T ^ (D | ~S))        /* TDSnox */
  120. rop_proc(rop76, S & ~(D & T))        /* SDTana */
  121. rop_proc(rop77, ~(S ^ ((S ^ T) | (D ^ S))))        /* SSTxDSxoxn */
  122. rop_proc(rop78, T ^ (D | (S ^ T)))    /* TDSTxox */
  123. rop_proc(rop79, ~(T & (D | ~S)))    /* TDSnoan */
  124. rop_proc(rop80, T & ~D)        /* TDna */
  125. rop_proc(rop81, ~(D | (S & ~T)))    /* DSTnaon */
  126. rop_proc(rop82, D ^ (T | (S & D)))    /* DTSDaox */
  127. rop_proc(rop83, ~(S ^ (T & (D ^ S))))        /* STDSxaxn */
  128. rop_proc(rop84, ~(D | ~(T | S)))    /* DTSonon */
  129. rop_proc(rop85, ~D)        /* Dn */
  130. rop_proc(rop86, D ^ (T | S))        /* DTSox */
  131. rop_proc(rop87, ~(D & (T | S)))        /* DTSoan */
  132. rop_proc(rop88, T ^ (D & (S | T)))    /* TDSToax */
  133. rop_proc(rop89, D ^ (T | ~S))        /* DTSnox */
  134. rop_proc(rop90, D ^ T)        /* DTx */
  135. rop_proc(rop91, D ^ (T | ~(S | D)))        /* DTSDonox */
  136. rop_proc(rop92, D ^ (T | (S ^ D)))    /* DTSDxox */
  137. rop_proc(rop93, ~(D & (T | ~S)))    /* DTSnoan */
  138. rop_proc(rop94, D ^ (T | (S & ~D)))        /* DTSDnaox */
  139. rop_proc(rop95, ~(D & T))    /* DTan */
  140. rop_proc(rop96, T & (D ^ S))        /* TDSxa */
  141. rop_proc(rop97, ~(D ^ (S ^ (T | (D & S)))))        /* DSTDSaoxxn */
  142. rop_proc(rop98, D ^ (S & (T | D)))    /* DSTDoax */
  143. rop_proc(rop99, S ^ (D | ~T))        /* SDTnox */
  144. rop_proc(rop100, S ^ (D & (T | S)))        /* SDTSoax */
  145. rop_proc(rop101, D ^ (S | ~T))        /* DSTnox */
  146. rop_proc(rop102, D ^ S)        /* DSx */
  147. rop_proc(rop103, S ^ (D | ~(T | S)))        /* SDTSonox */
  148. rop_proc(rop104, ~(D ^ (S ^ (T | ~(D | S)))))        /* DSTDSonoxxn */
  149. rop_proc(rop105, ~(T ^ (D ^ S)))    /* TDSxxn */
  150. rop_proc(rop106, D ^ (T & S))        /* DTSax */
  151. rop_proc(rop107, ~(T ^ (S ^ (D & (T | S)))))        /* TSDTSoaxxn */
  152. rop_proc(rop108, (D & T) ^ S)        /* SDTax */
  153. rop_proc(rop109, ~((((T | D) & S) ^ D) ^ T))        /* TDSTDoaxxn */
  154. rop_proc(rop110, ((~S | T) & D) ^ S)        /* SDTSnoax */
  155. rop_proc(rop111, ~(~(D ^ S) & T))    /* TDSxnan */
  156. rop_proc(rop112, ~(D & S) & T)        /* TDSana */
  157. rop_proc(rop113, ~(((S ^ D) & (T ^ D)) ^ S))        /* SSDxTDxaxn */
  158. rop_proc(rop114, ((T ^ S) | D) ^ S)        /* SDTSxox */
  159. rop_proc(rop115, ~((~T | D) & S))    /* SDTnoan */
  160. rop_proc(rop116, ((T ^ D) | S) ^ D)        /* DSTDxox */
  161. rop_proc(rop117, ~((~T | S) & D))    /* DSTnoan */
  162. rop_proc(rop118, ((~S & T) | D) ^ S)        /* SDTSnaox */
  163. rop_proc(rop119, ~(D & S))    /* DSan */
  164. rop_proc(rop120, (D & S) ^ T)        /* TDSax */
  165. rop_proc(rop121, ~((((D | S) & T) ^ S) ^ D))        /* DSTDSoaxxn */
  166. rop_proc(rop122, ((~D | S) & T) ^ D)        /* DTSDnoax */
  167. rop_proc(rop123, ~(~(D ^ T) & S))    /* SDTxnan */
  168. rop_proc(rop124, ((~S | D) & T) ^ S)        /* STDSnoax */
  169. rop_proc(rop125, ~(~(T ^ S) & D))    /* DTSxnan */
  170. rop_proc(rop126, (S ^ T) | (D ^ S))        /* STxDSxo */
  171. rop_proc(rop127, ~((T & S) & D))    /* DTSaan */
  172. rop_proc(rop128, (T & S) & D)        /* DTSaa */
  173. rop_proc(rop129, ~((S ^ T) | (D ^ S)))        /* STxDSxon */
  174. rop_proc(rop130, ~(T ^ S) & D)        /* DTSxna */
  175. rop_proc(rop131, ~(((~S | D) & T) ^ S))        /* STDSnoaxn */
  176. rop_proc(rop132, ~(D ^ T) & S)        /* SDTxna */
  177. rop_proc(rop133, ~(((~T | S) & D) ^ T))        /* TDSTnoaxn */
  178. rop_proc(rop134, (((D | S) & T) ^ S) ^ D)    /* DSTDSoaxx */
  179. rop_proc(rop135, ~((D & S) ^ T))    /* TDSaxn */
  180. rop_proc(rop136, D & S)        /* DSa */
  181. rop_proc(rop137, ~(((~S & T) | D) ^ S))        /* SDTSnaoxn */
  182. rop_proc(rop138, (~T | S) & D)        /* DSTnoa */
  183. rop_proc(rop139, ~(((T ^ D) | S) ^ D))        /* DSTDxoxn */
  184. rop_proc(rop140, (~T | D) & S)        /* SDTnoa */
  185. rop_proc(rop141, ~(((T ^ S) | D) ^ S))        /* SDTSxoxn */
  186. rop_proc(rop142, ((S ^ D) & (T ^ D)) ^ S)    /* SSDxTDxax */
  187. rop_proc(rop143, ~(~(D & S) & T))    /* TDSanan */
  188. rop_proc(rop144, ~(D ^ S) & T)        /* TDSxna */
  189. rop_proc(rop145, ~(((~S | T) & D) ^ S))        /* SDTSnoaxn */
  190. rop_proc(rop146, (((D | T) & S) ^ T) ^ D)    /* DTSDToaxx */
  191. rop_proc(rop147, ~((T & D) ^ S))    /* STDaxn */
  192. rop_proc(rop148, (((T | S) & D) ^ S) ^ T)    /* TSDTSoaxx */
  193. rop_proc(rop149, ~((T & S) ^ D))    /* DTSaxn */
  194. rop_proc(rop150, (T ^ S) ^ D)        /* DTSxx */
  195. rop_proc(rop151, ((~(T | S) | D) ^ S) ^ T)    /* TSDTSonoxx */
  196. rop_proc(rop152, ~((~(T | S) | D) ^ S))        /* SDTSonoxn */
  197. rop_proc(rop153, ~(D ^ S))    /* DSxn */
  198. rop_proc(rop154, (~S & T) ^ D)        /* DTSnax */
  199. rop_proc(rop155, ~(((T | S) & D) ^ S))        /* SDTSoaxn */
  200. rop_proc(rop156, (~D & T) ^ S)        /* STDnax */
  201. rop_proc(rop157, ~(((T | D) & S) ^ D))        /* DSTDoaxn */
  202. rop_proc(rop158, (((D & S) | T) ^ S) ^ D)    /* DSTDSaoxx */
  203. rop_proc(rop159, ~((D ^ S) & T))    /* TDSxan */
  204. rop_proc(rop160, D & T)        /* DTa */
  205. rop_proc(rop161, ~(((~T & S) | D) ^ T))        /* TDSTnaoxn */
  206. rop_proc(rop162, (~S | T) & D)        /* DTSnoa */
  207. rop_proc(rop163, ~(((D ^ S) | T) ^ D))        /* DTSDxoxn */
  208. rop_proc(rop164, ~((~(T | S) | D) ^ T))        /* TDSTonoxn */
  209. rop_proc(rop165, ~(D ^ T))    /* TDxn */
  210. rop_proc(rop166, (~T & S) ^ D)        /* DSTnax */
  211. rop_proc(rop167, ~(((T | S) & D) ^ T))        /* TDSToaxn */
  212. rop_proc(rop168, ((S | T) & D))        /* DTSoa */
  213. rop_proc(rop169, ~((S | T) ^ D))    /* DTSoxn */
  214. rop_proc(rop170, D)        /* D */
  215. rop_proc(rop171, ~(S | T) | D)        /* DTSono */
  216. rop_proc(rop172, (((S ^ D) & T) ^ S))        /* STDSxax */
  217. rop_proc(rop173, ~(((D & S) | T) ^ D))        /* DTSDaoxn */
  218. rop_proc(rop174, (~T & S) | D)        /* DSTnao */
  219. rop_proc(rop175, ~T | D)    /* DTno */
  220. rop_proc(rop176, (~S | D) & T)        /* TDSnoa */
  221. rop_proc(rop177, ~(((T ^ S) | D) ^ T))        /* TDSTxoxn */
  222. rop_proc(rop178, ((S ^ D) | (S ^ T)) ^ S)    /* SSTxDSxox */
  223. rop_proc(rop179, ~(~(T & D) & S))    /* SDTanan */
  224. rop_proc(rop180, (~D & S) ^ T)        /* TSDnax */
  225. rop_proc(rop181, ~(((D | S) & T) ^ D))        /* DTSDoaxn */
  226. rop_proc(rop182, (((T & D) | S) ^ T) ^ D)    /* DTSDTaoxx */
  227. rop_proc(rop183, ~((T ^ D) & S))    /* SDTxan */
  228. rop_proc(rop184, ((T ^ D) & S) ^ T)        /* TSDTxax */
  229. rop_proc(rop185, (~((D & T) | S) ^ D))        /* DSTDaoxn */
  230. rop_proc(rop186, (~S & T) | D)        /* DTSnao */
  231. rop_proc(rop187, ~S | D)    /* DSno */
  232. rop_proc(rop188, (~(S & D) & T) ^ S)        /* STDSanax */
  233. rop_proc(rop189, ~((D ^ T) & (D ^ S)))        /* SDxTDxan */
  234. rop_proc(rop190, (S ^ T) | D)        /* DTSxo */
  235. rop_proc(rop191, ~(S & T) | D)        /* DTSano */
  236. rop_proc(rop192, T & S)        /* TSa */
  237. rop_proc(rop193, ~(((~S & D) | T) ^ S))        /* STDSnaoxn */
  238. rop_proc(rop194, ~x(o(~o(S, D), T), S))        /* STDSonoxn */
  239. rop_proc(rop195, ~(S ^ T))    /* TSxn */
  240. rop_proc(rop196, ((~D | T) & S))    /* STDnoa */
  241. rop_proc(rop197, ~(((S ^ D) | T) ^ S))        /* STDSxoxn */
  242. rop_proc(rop198, ((~T & D) ^ S))    /* SDTnax */
  243. rop_proc(rop199, ~(((T | D) & S) ^ T))        /* TSDToaxn */
  244. rop_proc(rop200, ((T | D) & S))        /* SDToa */
  245. rop_proc(rop201, ~((D | T) ^ S))    /* STDoxn */
  246. rop_proc(rop202, ((D ^ S) & T) ^ D)        /* DTSDxax */
  247. rop_proc(rop203, ~(((S & D) | T) ^ S))        /* STDSaoxn */
  248. rop_proc(rop204, S)        /* S */
  249. rop_proc(rop205, ~(T | D) | S)        /* SDTono */
  250. rop_proc(rop206, (~T & D) | S)        /* SDTnao */
  251. rop_proc(rop207, ~T | S)    /* STno */
  252. rop_proc(rop208, (~D | S) & T)        /* TSDnoa */
  253. rop_proc(rop209, ~(((T ^ D) | S) ^ T))        /* TSDTxoxn */
  254. rop_proc(rop210, (~S & D) ^ T)        /* TDSnax */
  255. rop_proc(rop211, ~(((S | D) & T) ^ S))        /* STDSoaxn */
  256. rop_proc(rop212, x(a(x(D, T), x(T, S)), S))        /* SSTxTDxax */
  257. rop_proc(rop213, ~(~(S & T) & D))    /* DTSanan */
  258. rop_proc(rop214, ((((S & T) | D) ^ S) ^ T))        /* TSDTS aoxx */
  259. rop_proc(rop215, ~((S ^ T) & D))    /* DTS xan */
  260. rop_proc(rop216, ((T ^ S) & D) ^ T)        /* TDST xax */
  261. rop_proc(rop217, ~(((S & T) | D) ^ S))        /* SDTS aoxn */
  262. rop_proc(rop218, x(a(~a(D, S), T), D))        /* DTSD anax */
  263. rop_proc(rop219, ~a(x(S, D), x(T, S)))        /* STxDSxan */
  264. rop_proc(rop220, (~D & T) | S)        /* STD nao */
  265. rop_proc(rop221, ~D | S)    /* SDno */
  266. rop_proc(rop222, (T ^ D) | S)        /* SDT xo */
  267. rop_proc(rop223, (~(T & D)) | S)    /* SDT ano */
  268. rop_proc(rop224, ((S | D) & T))        /* TDS oa */
  269. rop_proc(rop225, ~((S | D) ^ T))    /*  TDS oxn */
  270. rop_proc(rop226, (((D ^ T) & S) ^ D))        /* DSTD xax */
  271. rop_proc(rop227, ~(((T & D) | S) ^ T))        /* TSDT aoxn */
  272. rop_proc(rop228, ((S ^ T) & D) ^ S)        /* SDTSxax */
  273. rop_proc(rop229, ~(((T & S) | D) ^ T))        /* TDST aoxn */
  274. rop_proc(rop230, (~(S & T) & D) ^ S)        /* SDTSanax */
  275. rop_proc(rop231, ~a(x(D, T), x(T, S)))        /* STxTDxan */
  276. rop_proc(rop232, x(a(x(S, D), x(T, S)), S))        /* SS TxD Sxax */
  277. rop_proc(rop233, ~x(x(a(~a(S, D), T), S), D))        /* DST DSan axxn   */
  278. rop_proc(rop234, (S & T) | D)        /* DTSao */
  279. rop_proc(rop235, ~(S ^ T) | D)        /* DTSxno */
  280. rop_proc(rop236, (T & D) | S)        /* SDTao */
  281. rop_proc(rop237, ~(T ^ D) | S)        /* SDTxno */
  282. rop_proc(rop238, S | D)        /* DSo */
  283. rop_proc(rop239, (~T | D) | S)        /* SDTnoo */
  284. rop_proc(rop240, T)        /* T */
  285. rop_proc(rop241, ~(S | D) | T)        /* TDSono */
  286. rop_proc(rop242, (~S & D) | T)        /* TDSnao */
  287. rop_proc(rop243, ~S | T)    /* TSno */
  288. rop_proc(rop244, (~D & S) | T)        /* TSDnao */
  289. rop_proc(rop245, ~D | T)    /* TDno */
  290. rop_proc(rop246, (S ^ D) | T)        /* TDSxo */
  291. rop_proc(rop247, ~(S & D) | T)        /* TDSano */
  292. rop_proc(rop248, (S & D) | T)        /* TDSao */
  293. rop_proc(rop249, ~(S ^ D) | T)        /* TDSxno */
  294. rop_proc(rop250, D | T)        /* DTo */
  295. rop_proc(rop251, (~S | T) | D)        /* DTSnoo */
  296. rop_proc(rop252, S | T)        /* TSo */
  297. rop_proc(rop253, (~D | S) | T)        /* TSDnoo */
  298. rop_proc(rop254, S | T | D)    /* DTSoo */
  299. rop_proc(rop255, ~(rop_operand) 0)    /* 1 */
  300. #undef rop_proc
  301.      const rop_proc rop_proc_table[256] =
  302.      {
  303.      rop0, rop1, rop2, rop3, rop4, rop5, rop6, rop7,
  304.      rop8, rop9, rop10, rop11, rop12, rop13, rop14, rop15,
  305.      rop16, rop17, rop18, rop19, rop20, rop21, rop22, rop23,
  306.      rop24, rop25, rop26, rop27, rop28, rop29, rop30, rop31,
  307.      rop32, rop33, rop34, rop35, rop36, rop37, rop38, rop39,
  308.      rop40, rop41, rop42, rop43, rop44, rop45, rop46, rop47,
  309.      rop48, rop49, rop50, rop51, rop52, rop53, rop54, rop55,
  310.      rop56, rop57, rop58, rop59, rop60, rop61, rop62, rop63,
  311.      rop64, rop65, rop66, rop67, rop68, rop69, rop70, rop71,
  312.      rop72, rop73, rop74, rop75, rop76, rop77, rop78, rop79,
  313.      rop80, rop81, rop82, rop83, rop84, rop85, rop86, rop87,
  314.      rop88, rop89, rop90, rop91, rop92, rop93, rop94, rop95,
  315.      rop96, rop97, rop98, rop99, rop100, rop101, rop102, rop103,
  316.      rop104, rop105, rop106, rop107, rop108, rop109, rop110, rop111,
  317.      rop112, rop113, rop114, rop115, rop116, rop117, rop118, rop119,
  318.      rop120, rop121, rop122, rop123, rop124, rop125, rop126, rop127,
  319.      rop128, rop129, rop130, rop131, rop132, rop133, rop134, rop135,
  320.      rop136, rop137, rop138, rop139, rop140, rop141, rop142, rop143,
  321.      rop144, rop145, rop146, rop147, rop148, rop149, rop150, rop151,
  322.      rop152, rop153, rop154, rop155, rop156, rop157, rop158, rop159,
  323.      rop160, rop161, rop162, rop163, rop164, rop165, rop166, rop167,
  324.      rop168, rop169, rop170, rop171, rop172, rop173, rop174, rop175,
  325.      rop176, rop177, rop178, rop179, rop180, rop181, rop182, rop183,
  326.      rop184, rop185, rop186, rop187, rop188, rop189, rop190, rop191,
  327.      rop192, rop193, rop194, rop195, rop196, rop197, rop198, rop199,
  328.      rop200, rop201, rop202, rop203, rop204, rop205, rop206, rop207,
  329.      rop208, rop209, rop210, rop211, rop212, rop213, rop214, rop215,
  330.      rop216, rop217, rop218, rop219, rop220, rop221, rop222, rop223,
  331.      rop224, rop225, rop226, rop227, rop228, rop229, rop230, rop231,
  332.      rop232, rop233, rop234, rop235, rop236, rop237, rop238, rop239,
  333.      rop240, rop241, rop242, rop243, rop244, rop245, rop246, rop247,
  334.      rop248, rop249, rop250, rop251, rop252, rop253, rop254, rop255
  335.      };
  336.  
  337. /*
  338.  * Here is the program that generated the table below.
  339.  *
  340.  int
  341.  main(int argc, char *argv[])
  342.  {      uint i;
  343.  for ( i = 0; i < 256; ++i )
  344.  printf("%d,",
  345.  (rop3_uses_D(i) ? rop_usage_D : 0) |
  346.  (rop3_uses_S(i) ? rop_usage_S : 0) |
  347.  (rop3_uses_T(i) ? rop_usage_T : 0));
  348.  fflush(stdout);
  349.  return 0;
  350.  }
  351.  */
  352.  
  353.      const byte /*rop_usage_t */ rop_usage_table[256] =
  354.      {
  355.      0, 7, 7, 6, 7, 5, 7, 7, 7, 7, 5, 7, 6, 7, 7, 4,
  356.      7, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  357.      7, 7, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  358.      6, 7, 7, 2, 7, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 6,
  359.      7, 7, 7, 7, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  360.      5, 7, 7, 7, 7, 1, 7, 7, 7, 7, 5, 7, 7, 7, 7, 5,
  361.      7, 7, 7, 7, 7, 7, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  362.      7, 7, 7, 7, 7, 7, 7, 3, 7, 7, 7, 7, 7, 7, 7, 7,
  363.      7, 7, 7, 7, 7, 7, 7, 7, 3, 7, 7, 7, 7, 7, 7, 7,
  364.      7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 7, 7, 7, 7, 7, 7,
  365.      5, 7, 7, 7, 7, 5, 7, 7, 7, 7, 1, 7, 7, 7, 7, 5,
  366.      7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 7, 7, 7, 7,
  367.      6, 7, 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 2, 7, 7, 6,
  368.      7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 7, 7,
  369.      7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 3, 7,
  370.      4, 7, 7, 6, 7, 5, 7, 7, 7, 7, 5, 7, 6, 7, 7, 0
  371.      };
  372.